#ifndef __HAL_GNSS_H__
#define __HAL_GNSS_H__

#include "gbl_types.h"
#include "os_api.h"
/*===========================================================================

                          Type definition.

===========================================================================*/


typedef enum
{
	EVENT_AGNSS_RESULT,
	EVENT_GNSS_DATA,
	EVENT_GNSS_NMEA,

	EVENT_UNKONWN
}GNSS_EVENT_T_E;

/*****************************************************************
* Function: hal_GnssInit
*
* Description:
* 	该函数用于初始化 GNSS 接口。
* 
* Parameters:
* 	gnss_cb	  	[In] 	gnssEventCallback类型，用于接收GNSS事件。
*					    eventid：
					    EVENT_AGNSS_RESULT：data取int型, 0: AGNSS数据有效或者下载成功，-1：AGNSS无效且下载失败
                        EVENT_GNSS_DATA:  data取char *型,GNSS 原始数据
                        EVENT_GNSS_NMEA:  data取char *型,GNSS NEMA 原始数据
* 	mode  	    [In] 	1：启动GNSS时，先加载新的firmware到RAM中再启动GNSS（性能更优，加载时间大概3-5秒）。
*					    2：启动GNSS时，使用ROM中固件启动GNSS； 
*					    3：启动GNSS时，先加载新的firmware到RAM中再启动GNSS，且尝试使用AGNSS辅助数据； 
*								a.AGNSS数据有效时，GNSS启动时直接导入；
*								b.AGNSS数据无效时，GNSS先启动定位，下载成功后自动导入，下载的AGNSS数据有效期2小时，有效期内启动GNSS会直接导入；
*								c.AGNSS数据无效时且下载失败后，不影响GNSS定位，直接放弃AGNSS数据导入。
*					    4：启动GNSS时，使用ROM中固件启动GNSS，且尝试使用AGNSS辅助数据； 
*								a.AGNSS数据有效时，GNSS启动时直接导入；
*								b.AGNSS数据无效时，GNSS先启动定位，下载成功后自动导入，下载的AGNSS数据有效期2小时，有效期内启动GNSS会直接导入；
*								c.AGNSS数据无效时且下载失败后，不影响GNSS定位，直接放弃AGNSS数据导入。
* 	rptmode	[In] 	    0：原始GPS数据块上报；
* 				 	    1：GPS数据按照NMEA语句，每次只上报一句；
* Return:
* 	 0 :  成功
* 	-1 :  成功
*
*****************************************************************/
int hal_GnssInit(void (*gnss_cb)(GNSS_EVENT_T_E, void *), UINT8 mode, UINT8 rptmode);

/*****************************************************************
* Function: hal_GnssOpen
*
* Description:
* 	该函数用于打开 GNSS 定位。
* 
* Parameters:
* 	NONE
* Return:
* 	 0 :  成功
* 	-1 :  成功
*
*****************************************************************/
int hal_GnssOpen(void);

/*****************************************************************
* Function: hal_GnssClose
*
* Description:
* 	该函数用于关闭 GNSS 定位。
* 
* Parameters:
* 	NONE
* Return:
* 	 0 :  成功
* 	-1 :  成功
*
*****************************************************************/
int hal_GnssClose(void);

/*****************************************************************
* Function: hal_GnssCmd
*
* Description:
* 	该函数用于发送一些GNSS指令, 需要在GNSS运行状态下发送，接收到GNSS有效数据可以判定为运行状态，如"GGA"、"RMC"、"GSA"、"GSV"。
* 
* Parameters:
* 	gnss_cmd	  	[In] 	gnss指令，详见《ICOE_ Protocol Specification_Primary_SPS_R1.0.20.pdf》。
* Return:
* 	 0 :  成功
* 	-1 :  成功
*
*****************************************************************/
int hal_GnssCmd(char *gnss_cmd);



#endif
